package com.ktjiaoyu.crm.controller;

import com.ktjiaoyu.crm.entity.Role;
import com.ktjiaoyu.crm.service.IRoleService;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @Author：南小楠
 */
public class RoleController<Right> {
    @Controller
    @RequestMapping(value = "/role")

    public class RoleController{

    @Resource
    private IRoleService roleService;

    @RequestMapping(value = "/list")

    public String list(@RequestParam(required = false, defaultValue = "") String roleName, @RequestParam(required = false, defaultValue = "1") int pageIndex, Model model) {
        Sort sort = new Sort(Sort.Direction.ASC, "roleId");
        Pageable pageable = PageRequest.of(pageIndex - 1, 3, sort);
        Page<Role> rolePage = roleService.findRole(roleName, pageable);
        model.addAttribute("rolePage", rolePage);
        model.addAttribute("roleName", roleName);//保存查询条件 14. return "role/list"; 15. }

    }

    @RequestMapping(value = "/add")

    public String add(Model model) {
        //查找所有权限,用于指派权限
        List<Right> rights = roleService.findAllRights();
        model.addAttribute("rights", rights);
        return "role/add";

    }

    @RequestMapping(value = "/edit")

    public String edit(Long roleId, Model model) {
        Role role = roleService.getRole(roleId);
        model.addAttribute("role", role);
        //查找角色拥有的权限
        List<Right> roleRights = roleService.findRightsByRole(role);
        model.addAttribute("roleRights", roleRights);
        //查找所有权限,用于指派权限
        List<Right> rights = roleService.findAllRights();
        model.addAttribute("rights", rights);
        return "role/edit";

    }

    @RequestMapping(value = "/save")

    public String save(Role role, String[] rightCodes) {
        if (rightCodes != null) {
            for (String rightCode : rightCodes) {
                Right right = new Right();
                right.setRightCode(rightCode);

                role.getRights().add(right); //将关联的权限添加到角色中，用于级联新增关联表的数据
            }

        }
        roleService.saveRole(role);//新增，会级联新增关联表的数据
        return "redirect:/role/list"; //增删改之后跳转最好使用重定向
    }
    @RequestMapping(value = "/del")
    @ResponseBody //返回json
             public Map del(Long roleId){//Ajax删除
            Map map = new HashMap();
        try

    {
        roleService.deleteRoleById(roleId);
        map.put("delResult", true);

    } catch(
    Exception e)

    {
        e.printStackTrace();
        map.put("delResult", false);

    }
        return map;

}
}


